package com.gss.plugin.mp.config;

import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.IdType;
import lombok.Data;
import org.apache.ibatis.logging.Log;
import org.apache.ibatis.logging.stdout.StdOutImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * @author: DYang
 * @since: 2023/8/22
 * @description:
 */
@Configuration
@Data
@ConfigurationProperties(prefix = "stars.mp")
public class MpProperties {

    /**
     * 连接数据库配置
     */
    private DataSourceConfig dbConfig;
    /**
     * mybatis-plus配置
     */
    private MybatisPlus mybatisPlus;

    /**
     * 数据库配置
     */
    @Data
    public static class DataSourceConfig{
        /**
         * 数据源名称
         */
        @Value("${spring.application.name}")
        private String name;
//        /**
//         * 数据源类型
//         */
//        private String type = "com.alibaba.druid.pool.DruidDataSource";
        /**
         * 连接驱动类型
         * mysql、postgresql、oracle
         */
        private String driverType;

//        /**
//         * 数据库驱动
//         */
//        private String driverClassName;
        /**
         * 数据库连接url
         */
        private String url;
        /**
         * 数据库名称
         */
        private String dbName;
        /**
         * 账号
         */
        private String username;
        /**
         * 密码
         */
        private String password;
        /**
         * 初始连接数
         */
        private int initialSize = 1;
        /**
         * 最小连接池数量
         */
        private int minIdle = 2;
        /**
         * 最大连接池数量
         */
        private int maxActive = 10;
        /**
         * 配置获取连接等待超时的时间
         */
        private long maxWait = 60000;
        /**
         * 打开PSCache，并且指定每个连接上PSCache的大小
         */
        private boolean poolPreparedStatements = false;
        /**
         * 连接池最大预处理数量
         */
        private int maxPoolPreparedStatementPerConnectionSize = 20;
        /**
         * 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒
         */
        private long timeBetweenEvictionRunsMillis = 60000;
        /**
         * 过滤日志
         */
        private String filters = "stat,wall,log4j";
        /**
         * 验证连接是否成功
         */
        private String validationQuery = "select 1";

        private boolean testOnBorrow = true;
        /**
         * 空闲时测试
         */
        private boolean testWhileIdle = true;
        /**
         * 返回时测试
         */
        private boolean testOnReturn = true;

    }

    /**
     * mybatis-plus 配置
     */
    @Data
    public static class MybatisPlus{

        /**
         * 扫描 mapper 所在的包
         */
        private String[] mapperLocations;

        /**
         * 新增策略
         */
        private FieldStrategy dbInsertStrategy = FieldStrategy.NOT_EMPTY;
        /**
         * 修改策略
         */
        private FieldStrategy dbUpdateStrategy = FieldStrategy.NOT_EMPTY;
        /**
         * 条件语句
         */
        private FieldStrategy dbWhereStrategy = FieldStrategy.NOT_EMPTY;
        /**
         * 默认自增id
         */
        private IdType idType = IdType.AUTO;
        /**
         * 驼峰转下划线开启
         */
        private boolean mapUnderscoreToCamelCase = true;
        /**
         * 开启sql日志打印
         * org.apache.ibatis.logging.stdout.StdOutImpl
         */
        private Class<? extends Log> logImpl = StdOutImpl.class;
    }

}
